package controller

import (
	"VideoManageSystem/internal/service"
	"errors"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

// GetVideoById 查询单个视频
func GetVideoById(c *gin.Context) {
	videoID := c.Query("id")

	if videoID == "" {
		c.JSON(403, gin.H{
			"code":    1,
			"message": "视频 ID 不能为空",
		})
		return
	}

	video, err := service.GetVideoByIdFromSQL(videoID)
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			c.JSON(403, gin.H{
				"code":    2,
				"message": "该视频不存在；错误：" + err.Error(),
			})
		} else {
			c.JSON(500, gin.H{
				"code":    500,
				"message": "服务器内部错误，无法查询相关账号，请稍后再试；错误：" + err.Error(),
			})
		}
		return
	}

	// 返回成功响应
	c.JSON(200, gin.H{
		"code":    200,
		"message": "查询成功",
		"data":    video,
	})
}

// GetVideoList 查询多个视频
func GetVideoList(c *gin.Context) {
	var userInput struct {
		StartTime string `json:"startTime"` // 开始时间
		EndTime   string `json:"endTime"`   // 结束时间
		Page      int    `json:"page"`      // 页码
		Sort      string `json:"sort"`      // 升序/降序
		Search    string `json:"search"`    // 查询
	}

	if err := c.ShouldBindJSON(&userInput); err != nil {
		c.JSON(400, gin.H{
			"code":    400,
			"message": "请求参数错误；错误：" + err.Error(),
		})
		return
	}

	// 获取查询到的用户列表
	result, err := service.GetVideoListFromSQL(userInput)
	if err != nil {
		c.JSON(500, gin.H{
			"code":    500,
			"message": "服务器内部错误，无法查询相关视频，请稍后再试；错误：" + err.Error(),
		})
		return
	}

	c.JSON(200, gin.H{
		"code":       200,
		"message":    "查询成功",
		"data":       result.Videos,     // 直接将视频列表作为 data 字段返回
		"totalCount": result.TotalCount, // 数据库中所有符合查询条件的数据量
	})
}
